package com.hbnu.practices;

import java.util.Scanner;

/**
 * 圆桌离开（约瑟夫环）
 *
 * @author kittychen
 * @date 2025-09-10 上午 8:51
 */
public class Practice03 {
    public static void main(String[] args) {
        // 1、创建键盘输入对象
        Scanner sc = new Scanner(System.in);

        // 2、输入数据
        System.out.println("请输入总人数：");
        int n = sc.nextInt();
        System.out.println("请输入报数：");
        int k = sc.nextInt();
        System.out.println("退出者报的数：");
        int m = sc.nextInt();

        // 3、定义数组表示用户编号
        int[] person = new int[n];   // 存储游戏玩家，数组值为0表示活着，数组值为1表示嘎了
        int[] seq = new int[n - 1];   // 存储退出者编号
        int index = 0;   // 每一轮开始报数者的编号

        // 4、开始猎杀游戏
        for (int i = 0; i < n - 1; i++) {  // 游戏总轮数
            index = k;   // 每一轮开始者的编号
            // 5、开始猎杀
            for (int j = 0; j < m; index++) {
                if (person[index % n] == 0) {   // 如果当前编号的人活着
                    j++;   // 报数
                }
            }

            person[(index - 1) % n] = 1; // 将退出游戏的玩家数组值改为1

            if ((index - 1) % n != 0) {
                seq[i] = (index - 1) % n;   // 记录退出者编号
            } else {
                seq[i] = index - 1;
            }

            k = index % n;  // 更新下一轮开始报数者的编号
        }

        // 6、输出退出者编号
        for (int i = 0; i < seq.length; i++) {
            if (i == seq.length - 1) {
                System.out.println(seq[i]);
            } else {
                System.out.print(seq[i] + " ");
            }

        }
    }
}
